/*
 * @lc app=leetcode.cn id=3 lang=cpp
 *
 * [3] 无重复字符的最长子串
 */

// @lc code=start
class Solution {
public:
    int lengthOfLongestSubstring(string s) {

    vector<int> dict(256, -1);

    //定义最大的长度为 maxLen
    int maxLen = 0, start = -1;
    for (int i = 0; i != s.length(); i++) {

        //遍历的当前字符是dict[s[i]] 如果大于 start,表示是s[i]已经出现过
        //那么就把当前的字符出现过的位置赋给start
        if (dict[s[i]] > start)
            start = dict[s[i]];
        printf("%c %d\n",s[i],s[i]);

        //将当前序号赋给dict[s[i]]
        dict[s[i]] = i;
        //当前字符的位置减去上一次出现该字符的位置的差值，和当前最大的长度比较，更新长度。
        maxLen = max(maxLen, i - start);
    }
    return maxLen;
    }
        
    
};
// @lc code=end

